#ifndef LADARWIDGET_H
#define LADARWIDGET_H

#include <QWidget>
#include <QProcess>
#include <QPushButton>
#include <QStringList>
#include <QVector>
#include <QString>
#include <QSerialPort>

class QRviz;

class LadarWidget : public QWidget
{
    Q_OBJECT

public:
    explicit LadarWidget(QWidget *parent = nullptr);
    ~LadarWidget();

private slots:
    void onOpenLadarClicked();
    void onOpenImuClicked();
    void onShowLadarImg();
    void onSavePathClicked();
    void onRecordClicked();
    void onLadarProcessFinished(int exitCode, QProcess::ExitStatus exitStatus);
    void onLadarProcessError(QProcess::ProcessError error);
    void onSerialError(QSerialPort::SerialPortError error);

private:
    void setupUI();
    void createConnections();
    void closeLadar();
    void closeImu();
    void kill_process(quint64 pid);
    void get_child_pids(quint64 parentPid, QVector<quint64> &childPids);
    void renameBagFile(const QString& oldPath, const QString& newName);
    void relayControl(int relayNum, const QString& action); // 继电器控制函数
    unsigned char calculateChecksum(unsigned char data1, unsigned char data2, unsigned char data3); // 计算校验码
    bool checkDeviceBusy(const QString& device); // 检查设备是否被占用
    bool setupSerial(const QString& device); // 设置串口参数
    void closeEvent(QCloseEvent *event) override; // 重写关闭事件

    QRviz *m_rviz;
    QRviz *m_ladarRviz;
    QPushButton *m_btnOpenLader;
    QPushButton *m_btnOpenImu;
    QPushButton *m_btnShowLader;
    QPushButton *m_btnRecord;
    QPushButton *m_btnSavePath;

    QVector<QProcess*> m_processes;
    QVector<quint64> pidList;
    QStringList *cmdList;

    bool m_ladarRunning = false;
    bool m_imuRunning = false;
    bool m_laderRvizState = false;
    bool m_isRecording = false;
    int m_rosVersion = 1; // 默认使用 ROS1

    QString m_savePath; // 保存路径
    QString m_currentBagPath; // 当前录制的bag文件路径
    QProcess *m_recordProcess = nullptr; // 录制进程
    QProcess *m_imuProcess = nullptr; // IMU进程
    QSerialPort *m_serial = nullptr; // 串口
    QString m_relayDevice; // 继电器设备路径
};

#endif // LADARWIDGET_H














//#ifndef LADARWIDGET_H
//#define LADARWIDGET_H

//#include <QWidget>
//#include <QProcess>
//#include <QPushButton>
//#include <QStringList>
//#include <QVector>
//#include <QString>
//#include <QSerialPort>

//class QRviz;

//class LadarWidget : public QWidget
//{
//    Q_OBJECT

//public:
//    explicit LadarWidget(QWidget *parent = nullptr);
//    ~LadarWidget();

//private slots:
//    void onOpenLadarClicked();
//    void onOpenImuClicked();
//    void onShowLadarImg();
//    void onSavePathClicked();
//    void onRecordClicked();
//    void onLadarProcessFinished(int exitCode, QProcess::ExitStatus exitStatus);
//    void onLadarProcessError(QProcess::ProcessError error);
//    void onSerialError(QSerialPort::SerialPortError error);

//private:
//    void setupUI();
//    void createConnections();
//    void closeLadar();
//    void closeImu();
//    void kill_process(quint64 pid);
//    void get_child_pids(quint64 parentPid, QVector<quint64> &childPids);
//    void renameBagFile(const QString& oldPath, const QString& newName);
//    void relayControl(int relayNum, const QString& action); // 继电器控制函数
//    unsigned char calculateChecksum(unsigned char data1, unsigned char data2, unsigned char data3); // 计算校验码
//    bool checkDeviceBusy(const QString& device); // 检查设备是否被占用
//    bool setupSerial(const QString& device); // 设置串口参数

//    QRviz *m_rviz;
//    QRviz *m_ladarRviz;
//    QPushButton *m_btnOpenLader;
//    QPushButton *m_btnOpenImu;
//    QPushButton *m_btnShowLader;
//    QPushButton *m_btnRecord;
//    QPushButton *m_btnSavePath;

//    QVector<QProcess*> m_processes;
//    QVector<quint64> pidList;
//    QStringList *cmdList;

//    bool m_ladarRunning = false;
//    bool m_imuRunning = false;
//    bool m_laderRvizState = false;
//    bool m_isRecording = false;
//    int m_rosVersion = 1; // 默认使用 ROS1

//    QString m_savePath; // 保存路径
//    QString m_currentBagPath; // 当前录制的bag文件路径
//    QProcess *m_recordProcess = nullptr; // 录制进程
//    QProcess *m_imuProcess = nullptr; // IMU进程
//    QSerialPort *m_serial = nullptr; // 串口
//    QString m_relayDevice; // 继电器设备路径
//};

//#endif // LADARWIDGET_H
